#ifndef __HHQ_HTTPHEAD_HPP_
#define __HHQ_HTTPHEAD_HPP_

#include <string>
#include <cstring>
#include <iostream>
#include <map>
#include <memory>

#include "HqFile.hpp" // MyFileSystem


// 请求头
class HqHttpHead{
    public:
        std::string method ;  
        std::string path ;
        std::string version ;  
        std::map<std::string, std::string> headers;
        std::map<std::string, std::string> path_params; // 路径上的参数
        std::unique_ptr<char[]> body; // 字节流

        // 构造函数，即完成解包动作  
        HqHttpHead(char* buf, int len) ;
        // 析构
        ~HqHttpHead()=default;
        // 输出函数
        friend std::ostream& operator<<(std::ostream& os, const HqHttpHead& h) ;
        std::string getFirstLine();
};

//  相应头
class HqHttpResHead{
public: 
    std::string version; 
    int resCode;
    std::string resDescr;
    std::map<std::string, std::string> headers;
    std::unique_ptr<char[]> body; //相应体
    MyFileStream *mfs; // 如果不为空，表示body没有数据，是一个文件流
    int ContentLength;

    HqHttpResHead();
    HqHttpResHead(HqHttpResHead&& h);
     
    void setCode(int code);
    ~HqHttpResHead();
    
    void setBody(char* buf, int bodyLen);
    void setType(std::string type);
    void setHeader(std::string key, std::string val);
    int getAllData(char* buf);
};


#endif






